package repaso;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

/**
 * post: Una libreria tiene secciones, y en cada seccion tiene multiples libros.
 */

public class Libreria {
	private Map<String, List<Libro>> libros;

	/**
	 * post: inicializa la libreria vacia, sin libros ni secciones.
	 */
	public Libreria() {
		this.libros = new HashMap<String, List<Libro>>();
	}

	/**
	 * post: incorpora nuevoLibro en la libreria en la seccion indicada; si la
	 * seccion no existe, la crea
	 */
	public void agregar(Libro nuevoLibro, String seccion) {
		if(this.libros.containsKey(seccion)){
			List<Libro> listaLibros = this.libros.get(seccion);
			listaLibros.add(nuevoLibro);
			this.libros.put(seccion, listaLibros);
		}else{
			List<Libro> nuevaListaDeLibros = new LinkedList<Libro>();
			nuevaListaDeLibros.add(nuevoLibro);
			this.libros.put(seccion, nuevaListaDeLibros);
		}
	}

	/**
	 * post: devuelve todas las secciones que tiene la libreria.
	 */
	public Set<String> getSecciones() {
		return this.libros.keySet();
	}

	/**
	 * post: devuelve todos los lirbos que existen en la libreria.
	 */
	public List<Libro> getLibros() {
		List<Libro> todosLosLibros = new LinkedList<Libro>();
		Iterator<List<Libro>> itLibros = this.libros.values().iterator();
		while (itLibros.hasNext()) {
			todosLosLibros.addAll(itLibros.next());
		}
		return todosLosLibros;
	}

	/**
	 * post: devuelve todos los libros que se encuentren en la seccion indicada,
	 * ordenados alfabeticamente por titulo.
	 */
	public SortedSet<Libro> getLibrosEnSeccion(String seccion) {
		SortedSet<Libro> librosOrdenados = new TreeSet<Libro>(
				new LibrosComparadorAlfabeticamente());

		Iterator<Libro> itLibros = this.getLibros().iterator();

		while (itLibros.hasNext()) {
			Libro nextLibro = itLibros.next();
			if (this.libros.get(seccion).contains(nextLibro)) {
				librosOrdenados.add(nextLibro);
			}
		}
		return librosOrdenados;
	}

}
